# =============================================================================
#           配置文件: “三区偏转实验”
# =============================================================================
#
# 概念:
# 这个配置文件根据您提供的三区域图像布局，创建了一个物理场景。
# 一个带正电的质子将从左侧发射，依次穿过具有不同方向的电磁场区域，
# 展示其复杂而有趣的运动轨迹。
#
# 区域定义:
# - 区域1 (左上角):  垂直纸面向外的磁场 (用点 • 表示)。
# - 区域2 (右上角):  垂直纸面向内的磁场 (用叉 × 表示)。
# - 区域3 (下方):    竖直向下的电场 (用箭头 ↓ 表示)。
#
# -----------------------------------------------------------------------------

# --- 物理常量 (方便使用) ---
e = 1.602e-19    # 基本电荷 (C)
m_p = 4*1.672e-27  # 质子质量 (kg)


# =============================================================================
# 1. 缩放与显示设置
# =============================================================================
SCALING_CONFIG = {
    # 自动缩放的边距因子。程序会自动缩放以包含所有场，并额外留出20%的边距。
    "auto_zoom_padding_factor": 1.2,

    # 时间缩放因子。由于质子速度很高，我们需要放慢时间来观察其轨迹。
    "time_scaling": 5e-8,
}


# =============================================================================
# 2. 场景配置
# =============================================================================
# 我们将整个场景的物理尺寸定义为 1.0米 宽，0.8米 高，
# 以此来映射图像的布局。原点 (0,0) 在左下角。
_E = 100000.
_B = 0.1
particle_x = 0.4
SCENE_CONFIG = {

    # --- 本场景不使用重力 ---
    "gravity": {
        "enabled": False,
        "g_vector": [0, -9.8],
    },

    # --- 发射的粒子 ---
    "particles": [
        {
            "label": "Proton",
            "mass": 0.2*m_p,
            "charge": e,
            # 从左侧，上半区域的中间高度发射。
            # y=0.6m 位于 0.4m 和 0.8m 的中间。
            "position": [particle_x, 0.3],
            # 水平向右的速度
            "velocity": [0.4*_E/_B, 0],      # 速度 2000 km/s
        },
        {
            "label": "Proton",
            "mass": 0.2*m_p,
            "charge": e,
            # 从左侧，上半区域的中间高度发射。
            # y=0.6m 位于 0.4m 和 0.8m 的中间。
            "position": [particle_x, 0.5],
            # 水平向右的速度
            "velocity": [0.7*_E/_B, 0],      # 速度 2000 km/s
        },
        {
            "label": "Proton",
            "mass": 0.2*m_p,
            "charge": e,
            # 从左侧，上半区域的中间高度发射。
            # y=0.6m 位于 0.4m 和 0.8m 的中间。
            "position": [particle_x, 0.7],
            # 水平向右的速度
            "velocity": [1.0*_E/_B, 0],      # 速度 2000 km/s
        },
        {
            "label": "Proton",
            "mass": 0.2*m_p,
            "charge": e,
            # 从左侧，上半区域的中间高度发射。
            # y=0.6m 位于 0.4m 和 0.8m 的中间。
            "position": [particle_x, 0.9],
            # 水平向右的速度
            "velocity": [1.3*_E/_B, 0],      # 速度 2000 km/s
        },
    ],

    # --- 对应图像的三个场区域 ---
    "fields": [
        # --- 区域1: 左上角，磁场向外 ---
        # {
        #     "type": "magnetic",
        #     "shape": "rect",
        #     # 定义一个从 x=0 到 x=0.5，y=0.4 到 y=0.8 的矩形区域。
        #     "region": [0.0, 0.4, 0.5, 0.4],
        #     # 磁场强度 0.1 特斯拉，正数代表方向垂直纸面向外。
        #     "strength": 0.05
        # },

        # --- 区域2: 右上角，磁场向内 ---
        {
            "type": "magnetic",
            "shape": "rect",
            # 定义一个从 x=0.5 到 x=1.0，y=0.4 到 y=0.8 的矩形区域。
            "region": [0.5, -0.1, 1.8, 1.5],
            # 磁场强度 0.1 特斯拉，负数代表方向垂直纸面向内。
            "strength": -_B
        },

        # --- 区域3: 下方区域，电场向下 ---
        {
            "type": "electric",
            "shape": "rect",
            # 定义一个覆盖整个底部的矩形区域，从 x=0 到 x=1.0，y=0 到 y=0.4。
            # "region": [0.0, 0.0, 1.0, 0.4],
            "region": [0.5, -0.1, 1.8, 1.5],
            # 电场强度矢量 [Ex, Ey]。[0, -2e4] 代表一个竖直向下的强电场。
            "strength_vector": [0, -_E]
        }
    ]
}